package com.hxd.common.core.manager.factory;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.TimerTask;

import org.apache.commons.io.FileUtils;

import com.hxd.common.utils.AddressUtils;
import com.hxd.common.utils.SpringUtils;
import com.hxd.entity.SysOperLog;
import com.hxd.entity.SysOss;
import com.hxd.service.SysOssService;

import cn.hutool.crypto.digest.DigestUtil;

public class AsyncFactory {
	
	/**
     * 操作日志记录
     * 
     * @param operLog 操作日志信息
     * @return 任务task
     */
    public static TimerTask recordOper(SysOperLog operLog) {
        return new TimerTask() {
            @Override
            public void run() {
                // 远程查询操作地点
                operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp()));
            }
        };
    }
    
    /**
     * 文件合并
     * @param tempFileDir 临时文件目录
     * @param finalFile 最终文件
     * @param guid uid
     * @return
     */
    public static TimerTask mergeFile(String guid, File tempFileDir, File finalFile, SysOss oss) {
    	return new TimerTask() {
			
			@Override
			public void run() {
				try {
					for (int i = 0; i < tempFileDir.listFiles().length; i++) {
						File partFile = new File(tempFileDir, guid + "_" + i + ".part");
						FileOutputStream destTempfos = new FileOutputStream(finalFile, true);
						//遍历"所有分片文件"到最终文件中
						FileUtils.copyFile(partFile, destTempfos);
						destTempfos.close();
					}
					oss.setMd5(DigestUtil.md5Hex(finalFile));
					SpringUtils.getBean(SysOssService.class).save(oss);
				} catch (IOException e) {
					e.printStackTrace();
				} finally {
					try {
						// 删除临时目录中的分片文件
						FileUtils.deleteDirectory(tempFileDir);
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				
			}
		};
    }
	
}
